package com.china.cnlongdb.server.engine;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import com.china.cnlongdb.server.connect.LongDbConnect;
import com.china.cnlongdb.server.threads.init.DeleteDataEmptyFileThread;
import com.china.cnlongdb.server.threads.init.InsertHandlerThread;
import com.china.cnlongdb.server.threads.init.MasterSlaveBackupThread;
import com.china.cnlongdb.server.threads.init.RemoveHandlerThread;
import com.china.cnlongdb.server.threads.init.UpdateTableRowThread;

/**
 * 系统名称：LongDbEngine.java
 * 模块名称：
 * 模块描述：longdb - 数据实时变化响应执行引擎
 * 功能列表：
 * 模块作者：ZOUYONG
 * 开发时间：2018年12月5日 下午10:04:15
 * 模块路径：com.china.cnlongdb.server.engine.LongDbEngine
 * 更新记录：
 */
public class LongDbEngine {
	
	// 线程池管理对象
	private static ScheduledExecutorService excutorService = Executors.newSingleThreadScheduledExecutor();
	private static LongDbConnect connect = null;

	/**
	 * 功能描述：
	 * 模块作者：ZOUYONG
	 * 开发时间：2018年11月24日 上午11:36:14
	 * 更新记录：
	 * 返回数据：void
	 */
	public static void startEngineMonitor(LongDbConnect connect) {
		if(null == LongDbEngine.connect) {
			LongDbEngine.connect = connect;
		}
		// 开启【新增】操作的监听
		startBatchInsertDataMonitor();
		// 开启【删除和修改】操作的监听
		startRemoveDataBaseAndTableFile();
		// 开启【表数据行数变化】监听
		startUpdateTableRowMonitor();
		// 开启【主从备份(Master-slave)】的监听
		startMasterToSlaveMonitor();
		// 开启【数据空文件】删除操作的监听
		startDeleteDataEmptyFileMonitor();
	}

	/**
	 * 功能描述：开启【新增数据】的监听
	 × 模块作者：ZOUYONG
	 × 开发时间：2018年11月22日 上午11:02:05
	 × 返回数据：void
	 */
	private static void startBatchInsertDataMonitor() {
		// 从现在开始，每隔1秒钟，执行一次线程操作
		excutorService.scheduleAtFixedRate(new InsertHandlerThread(connect), 0, 1, TimeUnit.SECONDS);
	}

	/**
	 * 功能描述：开启【监控要删除的表或数据库】文件的监听
	 * 模块作者：ZOUYONG
	 * 开发时间：2018年11月28日 下午10:26:14
	 * 更新记录：
	 * 返回数据：void
	 */
	private static void startRemoveDataBaseAndTableFile() {
		// 从现在开始，每隔1秒钟，执行一次线程操作
		excutorService.scheduleAtFixedRate(new RemoveHandlerThread(connect), 0, 1, TimeUnit.SECONDS);
	}
	
	/**
	 * 功能描述：开启【表数据文件行数变化】监听
	 * 模块作者：ZOUYONG
	 * 开发时间：2018年11月24日 上午9:58:38
	 * 更新记录：
	 * 返回数据：void
	 */
	private static void startUpdateTableRowMonitor() {
		// 从现在开始，每隔1秒钟，执行一次线程操作
		excutorService.scheduleAtFixedRate(new UpdateTableRowThread(connect), 0, 1, TimeUnit.SECONDS);
	}

	/**
	 * 功能描述：开启【主从备份(Master-slave)】的监听
	 × 模块作者：ZOUYONG
	 × 开发时间：2018年12月25日 上午10:47:30
	 × 返回数据：void
	 */
	private static void startMasterToSlaveMonitor() {
		// 从现在开始，每隔1秒钟，执行一次线程操作
		excutorService.scheduleAtFixedRate(new MasterSlaveBackupThread(connect), 0, 1, TimeUnit.SECONDS);
	}

	/**
	 * 功能描述：开启【数据空文件】删除操作的监听
	 × 模块作者：ZOUYONG
	 × 开发时间：2019年4月17日 下午5:50:22
	 × 返回数据：void
	 */
	private static void startDeleteDataEmptyFileMonitor() {
		// 从现在开始，每隔1秒钟，执行一次线程操作
		excutorService.scheduleAtFixedRate(new DeleteDataEmptyFileThread(connect), 0, 1, TimeUnit.SECONDS);
	}

}
